home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / XPK / Source / test / testMemExamine.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  3.0 KB  |  128 lines

  1. #define NAME     "testMemExamine"
  2. #define REVISION "2"
  3. #define ENDCODE_NOCTRLC
  4.  
  5. /* Programmheader
  6.  
  7.     Name:        testMemExamine
  8.     Author:        SDI
  9.     Distribution:    PD
  10.     Description:    tests Xpk Examine function
  11.     Compileropts:    -
  12.     Linkeropts:    -l xpkmaster
  13.  
  14.  1.1   06.12.96 : fixed for new includes, added new WriteXpkFib
  15.  1.2   15.04.97 : included WriteXpkFib.c
  16. */
  17.  
  18. #include <pragma/exec_lib.h>
  19. #include <pragma/dos_lib.h>
  20. #include <pragma/xpkmaster_lib.h>
  21. #include <exec/memory.h>
  22. #include "SDI_defines.h"
  23. #include "PrintFlags.c"
  24.  
  25. struct Library        *XpkBase        = 0;
  26. ULONG            DosVersion        = 37;
  27. STRPTR            buf            = 0;
  28. BPTR            fh            = 0;
  29. struct RDArgs        *rda            = 0;
  30. struct FileInfoBlock    *fib            = 0;
  31. struct XpkFib        *xfib            = 0;
  32.  
  33. #define PARAM "FILENAME/A"
  34.  
  35. void WriteXpkFib(struct XpkFib *xfib)
  36. {
  37.   STRPTR a = 0;
  38.  
  39.   switch(xfib->xf_Type)
  40.   {
  41.     case 0: a = "XPKTYPE_UNPACKED"; break;
  42.     case 1: a = "XPKTYPE_PACKED"; break;
  43.     case 2: a = "XPKTYPE_ARCHIVE"; break;
  44.   }
  45.  
  46.   if(a)
  47.     VPrintf("xf_Type      : %s\n", &a);
  48.   else
  49.     VPrintf("xf_Type      : %ld\n", &xfib->xf_Type);
  50.   VPrintf(
  51.     "xf_ULen      : %ld\n"
  52.     "xf_CLen      : %ld\n"
  53.     "xf_NLen      : %ld\n"
  54.     "xf_UCur      : %ld\n"
  55.     "xf_CCur      : %ld\n"
  56.     "xf_ID        : %lx", &xfib->xf_ULen);
  57.   a = (STRPTR) &xfib->xf_ID;
  58.   VPrintf(" (%.4s)\n", &a);
  59.   a = xfib->xf_Packer;
  60.   VPrintf(
  61.     "xf_Packer    : %s\n", &a);
  62.   VPrintf(
  63.     "xf_SubVersion: %d\n"
  64.     "xf_MasVersion: %d\n"
  65.     "xf_Flags     : ", &xfib->xf_SubVersion);
  66.   {
  67.     ULONG i = xfib->xf_Flags;
  68.     PrintFlag(&i, XPKFLAGS_PASSWORD, "XPKFLAGS_PASSWORD");
  69.     PrintFlag(&i, XPKFLAGS_NOSEEK, "XPKFLAGS_NOSEEK");
  70.     PrintFlag(&i, XPKFLAGS_NONSTD, "XPKFLAGS_NONSTD");
  71.     PrintEndFlag(i, xfib->xf_Flags);
  72.   }
  73.   VPrintf(
  74.     "xf_Head      : %04lx%04lx%04lx%04lx\n"
  75.     "xf_Ratio     : %ld\n", &xfib->xf_Head[0]);
  76. }
  77.  
  78. void main(void)
  79. {
  80.   UBYTE errbuf[XPKERRMSGSIZE+1];
  81.   STRPTR filename;
  82.  
  83.   if(!(rda = ReadArgs(PARAM, (LONG *) &filename, 0)) ||
  84.   !(xfib = (struct XpkFib *) AllocMem(sizeof(struct XpkFib), MEMF_ANY|MEMF_CLEAR)) ||
  85.   !(XpkBase = OpenLibrary(XPKNAME, 0)))
  86.     End(RETURN_FAIL);
  87.  
  88.   if(XpkExamineTags(xfib, XPK_InName, filename, XPK_GetError, errbuf,
  89.     TAG_DONE))
  90.   {
  91.     STRPTR a = errbuf;
  92.     VPrintf("Can't XpkExamine: %s\n", &a);
  93.     End(RETURN_FAIL);
  94.   }
  95.  
  96.   WriteXpkFib(xfib);
  97.  
  98.   if(!(fh = Open(filename, MODE_OLDFILE)) ||
  99.   !(fib = (struct FileInfoBlock *) AllocDosObject(DOS_FIB, 0)) ||
  100.   !(ExamineFH(fh, fib)) ||
  101.   !(buf = (STRPTR) AllocMem(fib->fib_Size, MEMF_ANY)) ||
  102.   Read(fh, buf, fib->fib_Size) != fib->fib_Size)
  103.     End(RETURN_FAIL);
  104.  
  105.   if(XpkExamineTags(xfib, XPK_InBuf, buf, XPK_InLen, fib->fib_Size,
  106.     XPK_GetError, errbuf, TAG_DONE))
  107.   {
  108.     STRPTR a = errbuf;
  109.     VPrintf("Can't XpkExamine: %s\n", &a);
  110.     End(RETURN_FAIL);
  111.   }
  112.     
  113.   WriteXpkFib(xfib);
  114.  
  115.   End(RETURN_OK);
  116. }
  117.  
  118. void end(void)
  119. {
  120.   if(fh)    Close(fh);
  121.   if(xfib)    FreeMem(xfib, sizeof(struct XpkFib));
  122.   if(buf)    FreeMem(buf, fib->fib_Size);
  123.   if(XpkBase)    CloseLibrary(XpkBase);
  124.   if(fib)    FreeDosObject(DOS_FIB, fib);
  125.   if(rda)    FreeArgs(rda);
  126. }
  127.  
  128.